package com.iris.live.services.common.reconsitution;

import java.math.BigDecimal;

/**
 *  金额相关算法
 *  yitianle
 *  2017/4/8
 */
public class AmountUtils {

    /**
     * 提供减法运算
     * @param v1 被减数
     * @param v2 减数
     * @return 两个参数的差
     */
    public static BigDecimal subtract(BigDecimal v1, BigDecimal v2){
        BigDecimal value = new BigDecimal(0.00);
        if( null == v1 || v1.compareTo(value) !=1){
            return value;
        }
        return v1.subtract(v2);
    }


    /**
     * 提供加法运算。
     * @param v1 被加数
     * @param v2 加数
     * @return 两个参数的和
     */
    public static BigDecimal add(BigDecimal v1,BigDecimal v2){
        BigDecimal value = v2;
        if( null == v1){
            return value;
        }
        return v1.add(v2);
    }


    /**
     * 提供乘法运算。
     * @param v1 被乘数
     * @param v2 乘数
     * @return 两个参数的积
     */
    public static BigDecimal mul(BigDecimal v1,BigDecimal v2){
        BigDecimal value = new BigDecimal(0.00);
        if( null == v1 || v1.compareTo(value) !=1){
            return value;
        }
        return v1.multiply(v2);
    }


    /**
     * 提供（相对）精确的除法运算。当发生除不尽的情况时，由scale参数指
     * 定精度，以后的数字四舍五入。
     * @param v1 被除数
     * @param v2 除数
     * @param scale 表示表示需要精确到小数点以后几位。
     * @return 两个参数的商
     */
    public static BigDecimal div(BigDecimal v1,BigDecimal v2,int scale){
        if(scale<0){
            scale = 0;
        }
        return v1.divide(v2,scale,BigDecimal.ROUND_HALF_UP);
    }

    public static void main(String[] args) {
        System.out.println(subtract(new BigDecimal(12),new BigDecimal(1103.5)));
    }

}
